Introduction

Some text for introduction to this survey and results.

Results

Data Preparation

Student survey has been conducted for 2 weeks and received 51 total reponses.

Load all required libraries that will be used throughout this analysis.

library(plyr)
library(psych)
library(plotly)
library(summarytools)
st_options(plain.ascii = FALSE, style = "rmarkdown", dfSummary.varnumbers = FALSE, dfSummary.valid.col = FALSE)

Start reading both CSV files, from student survey and speedtest result.

csv_surv <- read.csv('Student_Survey.csv')
csv_test <- read.csv('Speedtest_Result.csv')

Rename variables name to something more meaningful, shorter and easier to code.

tmpstud <-
  plyr::rename(
    csv_surv,
    c(
      Academic.Programme = "Programme",
      Internet.Connection.Method = "SSID",
      Main.Usage.of.Internet = "Usage",
      On.overall.basis..how.satisfied.are.you.with.wireless.internet.connection.provided.by.IIUM. = "Satisfaction",
      Propose.a.solution.to.improve.IIUM.WIFI.services. = "Comment",
      Average.Duration.of.Daily.Use.of.Internet = "Duration",
      How.many.times.have.your.Internet.connection.been.suddenly.disconnected.or.face.intermittent.connection.in.past.3.days. = "Disconnected",
      Is.WiFi.coverage.adequate.and.within.acceptable.signal.strength. = "Coverage",
      How.satisfied.are.you.with.the.network.speed.to.achieve.your.main.usages. = "Speed"
    )
  )
tmptest <-
  plyr::rename(
    csv_test,
    c(
      Mahallah.Dept = "Mahallah",
      Download.Mbps = "Download",
      Upload.Mbps = "Upload",
      Ping.ms = "Ping",
      Jitter.ms = "Jitter",
      Loss.. = "Loss"
    )
  )

Perform data cleansing

tmpstud <- tmpstud[which(tmpstud$Gender == ''),]
tmpstud$Timestamp <- tmpstud$Gender <- tmpstud$Comment <- NULL
tmpstud$Usage[7] <-
  "Study and assignment, Topic and subject research, Casual browsing"
tmpstud$Usage <- strsplit(as.character(tmpstud$Usage), ",")
tmpstud$Satisfaction <-
  ifelse(
    tmpstud$Satisfaction == 1,
    "Very Dissatisfied",
    ifelse(
      tmpstud$Satisfaction == 2,
      "Dissatisfied",
      ifelse(tmpstud$Satisfaction == 3, "Satisfied", "Very Satisfied")
    )
  )
tmpstud$Speed <-
  ifelse(
    tmpstud$Speed == 1,
    "Very Dissatisfied",
    ifelse(
      tmpstud$Speed == 2,
      "Dissatisfied",
      ifelse(tmpstud$Speed == 3, "Satisfied", "Very Satisfied")
    )
  )
tmptest$Loss <- 0

Split Usage into list and transpose into dataframe

k <- 1
Respondent <- character()
Programme <- character()
SSID <- character()
Mahallah <- character()
Usage <- character()
Satisfaction <- character()
Duration <- character()
Speed <- character()
Disconnected <- character()
Coverage <- character()
# iterate each row to split Usage into separate line in data frame
for (i in 1:nrow(tmpstud))
{
  for (j in 1:3)
  {
    Respondent[k] <- i # to identify unique number of respondent
    Programme[k] <- as.character(tmpstud$Programme[i])
    SSID[k] <- as.character(tmpstud$SSID[i])
    Mahallah[k] <- as.character(tmpstud$Mahallah[i])
    Usage[k] <-
      trimws(tmpstud$Usage[[i]][j]) # trim leading and trailing whitespace
    Satisfaction[k] <- as.character(tmpstud$Satisfaction[i])
    Duration[k] <- as.character(tmpstud$Duration[i])
    Speed[k] <- as.character(tmpstud$Speed[i])
    Disconnected[k] <- as.character(tmpstud$Disconnected[i])
    Coverage[k] <- as.character(tmpstud$Coverage[i])
    
    k <- k + 1
  }
}

Finalized dataframe from previous step

dfstudentB <-
  data.frame(
    Respondent,
    Programme,
    SSID,
    Mahallah,
    Usage,
    Satisfaction,
    Duration,
    Speed,
    Disconnected,
    Coverage,
    stringsAsFactors = TRUE
  )
dfstudentA <-
  unique(dfstudentB[,-5]) # minus Usage and retrieve only unique records
dftest <- tmptest

High level summary

dfSummary(
  dfstudentA[,-1],
  max.distinct.values = 15,
  plain.ascii = FALSE,
  style = "grid",
  graph.magnif = 0.75,
  valid.col = FALSE,
  tmp.img.dir = "./img",
  na.col = FALSE
)

Data Frame Summary

dfstudentA

Dimensions: 50 x 8
Duplicates: 1

No Variable Stats / Values Freqs (% of Valid) Graph

1

Programme
[factor]

1. Alumni (<= 2 Years)
2. Postgraduate (PG)
3. Undergraduate (UG)

9 (18.0%)
7 (14.0%)
34 (68.0%)

2

SSID
[factor]

1. WiFi - Guest
2. WiFi - Staff
3. WiFi - Student

1 ( 2.0%)
1 ( 2.0%)
48 (96.0%)

3

Mahallah
[factor]

1. Ali
2. Ameenah
3. As-Siddiq
4. Asiah
5. Hafsah
6. Halimatus Saa’diah
7. Living outside IIUM
8. Maryam
9. Nusaibah
10. Ruqayyah
11. Safiyyah
12. Salahuddin
13. Sumayyah
14. Uthman
15. Zubair

2 ( 4.0%)
2 ( 4.0%)
2 ( 4.0%)
2 ( 4.0%)
3 ( 6.0%)
1 ( 2.0%)
4 ( 8.0%)
1 ( 2.0%)
4 ( 8.0%)
1 ( 2.0%)
8 (16.0%)
4 ( 8.0%)
2 ( 4.0%)
4 ( 8.0%)
10 (20.0%)

4

Satisfaction
[factor]

1. Dissatisfied
2. Satisfied
3. Very Dissatisfied
4. Very Satisfied

20 (40.0%)
15 (30.0%)
14 (28.0%)
1 ( 2.0%)

5

Duration
[factor]

1. 1 - 4 hours
2. 13 - 18 hours
3. 5 - 8 hours
4. 9 - 12 hours
5. Less than 1 hour
6. More than 18 hours

7 (14.0%)
5 (10.0%)
18 (36.0%)
13 (26.0%)
3 ( 6.0%)
4 ( 8.0%)

6

Speed
[factor]

1. Dissatisfied
2. Satisfied
3. Very Dissatisfied
4. Very Satisfied

22 (44.0%)
13 (26.0%)
11 (22.0%)
4 ( 8.0%)

7

Disconnected
[factor]

1. 1 - 5 times
2. 6 - 10 times
3. More than 10 times
4. Never

18 (36.0%)
7 (14.0%)
17 (34.0%)
8 (16.0%)

8

Coverage
[factor]

1. No
2. Yes

33 (66.0%)
17 (34.0%)

Usage of Internet

dfusage <- count(dfstudentB$Usage)
plot_ly(
  dfusage,
  labels = dfusage$x,
  values = ~ dfusage$freq,
  type = 'pie'
) %>%
  layout(
    title = 'Primary Usage of Internet',
    xaxis = list(
      showgrid = FALSE,
      zeroline = FALSE,
      showticklabels = FALSE
    ),
    yaxis = list(
      showgrid = FALSE,
      zeroline = FALSE,
      showticklabels = FALSE
    )
  )
LS0tDQp0aXRsZTogIklJVU0gV2lmaSBRdWFsaXR5IFN1cnZlcnkiDQphdXRob3I6ICJLaGFpcnVsIEZhdGhpIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGZpZ19jYXB0aW9uOiBubw0KICAgIGZpZ19oZWlnaHQ6IDQNCiAgICBmaWdfd2lkdGg6IDYNCiAgICBudW1iZXJfc2VjdGlvbnM6IG5vDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gPSBUUlVFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCgl3YXJuaW5nID0gRkFMU0UsDQoJcmVzdWx0cyA9ICJhc2lzIg0KKQ0KYGBgDQoNCiMgSW50cm9kdWN0aW9uDQoNClNvbWUgdGV4dCBmb3IgaW50cm9kdWN0aW9uIHRvIHRoaXMgc3VydmV5IGFuZCByZXN1bHRzLg0KDQoNCiMgUmVzdWx0cw0KDQojIyBEYXRhIFByZXBhcmF0aW9uDQoNClN0dWRlbnQgc3VydmV5IGhhcyBiZWVuIGNvbmR1Y3RlZCBmb3IgMiB3ZWVrcyBhbmQgcmVjZWl2ZWQgNTEgdG90YWwgcmVwb25zZXMuDQoNCkxvYWQgYWxsIHJlcXVpcmVkIGxpYnJhcmllcyB0aGF0IHdpbGwgYmUgdXNlZCB0aHJvdWdob3V0IHRoaXMgYW5hbHlzaXMuDQpgYGB7ciBMaWJyYXJ5LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCmxpYnJhcnkocGx5cikNCmxpYnJhcnkocHN5Y2gpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoc3VtbWFyeXRvb2xzKQ0KYGBgDQoNCmBgYHtyfQ0Kc3Rfb3B0aW9ucyhwbGFpbi5hc2NpaSA9IEZBTFNFLCBzdHlsZSA9ICJybWFya2Rvd24iLCBkZlN1bW1hcnkudmFybnVtYmVycyA9IEZBTFNFLCBkZlN1bW1hcnkudmFsaWQuY29sID0gRkFMU0UpDQpgYGANCg0KU3RhcnQgcmVhZGluZyBib3RoIENTViBmaWxlcywgZnJvbSBzdHVkZW50IHN1cnZleSBhbmQgc3BlZWR0ZXN0IHJlc3VsdC4NCmBgYHtyIFJlYWRDU1YsIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9DQpjc3Zfc3VydiA8LSByZWFkLmNzdignU3R1ZGVudF9TdXJ2ZXkuY3N2JykNCmNzdl90ZXN0IDwtIHJlYWQuY3N2KCdTcGVlZHRlc3RfUmVzdWx0LmNzdicpDQpgYGANCg0KUmVuYW1lIHZhcmlhYmxlcyBuYW1lIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwsIHNob3J0ZXIgYW5kIGVhc2llciB0byBjb2RlLg0KYGBge3IgRGF0YVByZXAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQ0KdG1wc3R1ZCA8LQ0KICBwbHlyOjpyZW5hbWUoDQogICAgY3N2X3N1cnYsDQogICAgYygNCiAgICAgIEFjYWRlbWljLlByb2dyYW1tZSA9ICJQcm9ncmFtbWUiLA0KICAgICAgSW50ZXJuZXQuQ29ubmVjdGlvbi5NZXRob2QgPSAiU1NJRCIsDQogICAgICBNYWluLlVzYWdlLm9mLkludGVybmV0ID0gIlVzYWdlIiwNCiAgICAgIE9uLm92ZXJhbGwuYmFzaXMuLmhvdy5zYXRpc2ZpZWQuYXJlLnlvdS53aXRoLndpcmVsZXNzLmludGVybmV0LmNvbm5lY3Rpb24ucHJvdmlkZWQuYnkuSUlVTS4gPSAiU2F0aXNmYWN0aW9uIiwNCiAgICAgIFByb3Bvc2UuYS5zb2x1dGlvbi50by5pbXByb3ZlLklJVU0uV0lGSS5zZXJ2aWNlcy4gPSAiQ29tbWVudCIsDQogICAgICBBdmVyYWdlLkR1cmF0aW9uLm9mLkRhaWx5LlVzZS5vZi5JbnRlcm5ldCA9ICJEdXJhdGlvbiIsDQogICAgICBIb3cubWFueS50aW1lcy5oYXZlLnlvdXIuSW50ZXJuZXQuY29ubmVjdGlvbi5iZWVuLnN1ZGRlbmx5LmRpc2Nvbm5lY3RlZC5vci5mYWNlLmludGVybWl0dGVudC5jb25uZWN0aW9uLmluLnBhc3QuMy5kYXlzLiA9ICJEaXNjb25uZWN0ZWQiLA0KICAgICAgSXMuV2lGaS5jb3ZlcmFnZS5hZGVxdWF0ZS5hbmQud2l0aGluLmFjY2VwdGFibGUuc2lnbmFsLnN0cmVuZ3RoLiA9ICJDb3ZlcmFnZSIsDQogICAgICBIb3cuc2F0aXNmaWVkLmFyZS55b3Uud2l0aC50aGUubmV0d29yay5zcGVlZC50by5hY2hpZXZlLnlvdXIubWFpbi51c2FnZXMuID0gIlNwZWVkIg0KICAgICkNCiAgKQ0KdG1wdGVzdCA8LQ0KICBwbHlyOjpyZW5hbWUoDQogICAgY3N2X3Rlc3QsDQogICAgYygNCiAgICAgIE1haGFsbGFoLkRlcHQgPSAiTWFoYWxsYWgiLA0KICAgICAgRG93bmxvYWQuTWJwcyA9ICJEb3dubG9hZCIsDQogICAgICBVcGxvYWQuTWJwcyA9ICJVcGxvYWQiLA0KICAgICAgUGluZy5tcyA9ICJQaW5nIiwNCiAgICAgIEppdHRlci5tcyA9ICJKaXR0ZXIiLA0KICAgICAgTG9zcy4uID0gIkxvc3MiDQogICAgKQ0KICApDQpgYGANCg0KUGVyZm9ybSBkYXRhIGNsZWFuc2luZw0KYGBge3IgRGF0YUNsZWFuc2UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQ0KdG1wc3R1ZCA8LSB0bXBzdHVkW3doaWNoKHRtcHN0dWQkR2VuZGVyID09ICcnKSxdDQp0bXBzdHVkJFRpbWVzdGFtcCA8LSB0bXBzdHVkJEdlbmRlciA8LSB0bXBzdHVkJENvbW1lbnQgPC0gTlVMTA0KdG1wc3R1ZCRVc2FnZVs3XSA8LQ0KICAiU3R1ZHkgYW5kIGFzc2lnbm1lbnQsIFRvcGljIGFuZCBzdWJqZWN0IHJlc2VhcmNoLCBDYXN1YWwgYnJvd3NpbmciDQp0bXBzdHVkJFVzYWdlIDwtIHN0cnNwbGl0KGFzLmNoYXJhY3Rlcih0bXBzdHVkJFVzYWdlKSwgIiwiKQ0KdG1wc3R1ZCRTYXRpc2ZhY3Rpb24gPC0NCiAgaWZlbHNlKA0KICAgIHRtcHN0dWQkU2F0aXNmYWN0aW9uID09IDEsDQogICAgIlZlcnkgRGlzc2F0aXNmaWVkIiwNCiAgICBpZmVsc2UoDQogICAgICB0bXBzdHVkJFNhdGlzZmFjdGlvbiA9PSAyLA0KICAgICAgIkRpc3NhdGlzZmllZCIsDQogICAgICBpZmVsc2UodG1wc3R1ZCRTYXRpc2ZhY3Rpb24gPT0gMywgIlNhdGlzZmllZCIsICJWZXJ5IFNhdGlzZmllZCIpDQogICAgKQ0KICApDQp0bXBzdHVkJFNwZWVkIDwtDQogIGlmZWxzZSgNCiAgICB0bXBzdHVkJFNwZWVkID09IDEsDQogICAgIlZlcnkgRGlzc2F0aXNmaWVkIiwNCiAgICBpZmVsc2UoDQogICAgICB0bXBzdHVkJFNwZWVkID09IDIsDQogICAgICAiRGlzc2F0aXNmaWVkIiwNCiAgICAgIGlmZWxzZSh0bXBzdHVkJFNwZWVkID09IDMsICJTYXRpc2ZpZWQiLCAiVmVyeSBTYXRpc2ZpZWQiKQ0KICAgICkNCiAgKQ0KDQp0bXB0ZXN0JExvc3MgPC0gMA0KYGBgDQoNClNwbGl0IFVzYWdlIGludG8gbGlzdCBhbmQgdHJhbnNwb3NlIGludG8gZGF0YWZyYW1lDQpgYGB7ciBUcmFuc3Bvc2UsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFLCBwYWdlZC5wcmludD1GQUxTRX0NCmsgPC0gMQ0KDQpSZXNwb25kZW50IDwtIGNoYXJhY3RlcigpDQpQcm9ncmFtbWUgPC0gY2hhcmFjdGVyKCkNClNTSUQgPC0gY2hhcmFjdGVyKCkNCk1haGFsbGFoIDwtIGNoYXJhY3RlcigpDQpVc2FnZSA8LSBjaGFyYWN0ZXIoKQ0KU2F0aXNmYWN0aW9uIDwtIGNoYXJhY3RlcigpDQpEdXJhdGlvbiA8LSBjaGFyYWN0ZXIoKQ0KU3BlZWQgPC0gY2hhcmFjdGVyKCkNCkRpc2Nvbm5lY3RlZCA8LSBjaGFyYWN0ZXIoKQ0KQ292ZXJhZ2UgPC0gY2hhcmFjdGVyKCkNCg0KIyBpdGVyYXRlIGVhY2ggcm93IHRvIHNwbGl0IFVzYWdlIGludG8gc2VwYXJhdGUgbGluZSBpbiBkYXRhIGZyYW1lDQpmb3IgKGkgaW4gMTpucm93KHRtcHN0dWQpKQ0Kew0KICBmb3IgKGogaW4gMTozKQ0KICB7DQogICAgUmVzcG9uZGVudFtrXSA8LSBpICMgdG8gaWRlbnRpZnkgdW5pcXVlIG51bWJlciBvZiByZXNwb25kZW50DQogICAgUHJvZ3JhbW1lW2tdIDwtIGFzLmNoYXJhY3Rlcih0bXBzdHVkJFByb2dyYW1tZVtpXSkNCiAgICBTU0lEW2tdIDwtIGFzLmNoYXJhY3Rlcih0bXBzdHVkJFNTSURbaV0pDQogICAgTWFoYWxsYWhba10gPC0gYXMuY2hhcmFjdGVyKHRtcHN0dWQkTWFoYWxsYWhbaV0pDQogICAgVXNhZ2Vba10gPC0NCiAgICAgIHRyaW13cyh0bXBzdHVkJFVzYWdlW1tpXV1bal0pICMgdHJpbSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlDQogICAgU2F0aXNmYWN0aW9uW2tdIDwtIGFzLmNoYXJhY3Rlcih0bXBzdHVkJFNhdGlzZmFjdGlvbltpXSkNCiAgICBEdXJhdGlvbltrXSA8LSBhcy5jaGFyYWN0ZXIodG1wc3R1ZCREdXJhdGlvbltpXSkNCiAgICBTcGVlZFtrXSA8LSBhcy5jaGFyYWN0ZXIodG1wc3R1ZCRTcGVlZFtpXSkNCiAgICBEaXNjb25uZWN0ZWRba10gPC0gYXMuY2hhcmFjdGVyKHRtcHN0dWQkRGlzY29ubmVjdGVkW2ldKQ0KICAgIENvdmVyYWdlW2tdIDwtIGFzLmNoYXJhY3Rlcih0bXBzdHVkJENvdmVyYWdlW2ldKQ0KICAgIA0KICAgIGsgPC0gayArIDENCiAgfQ0KfQ0KYGBgDQoNCkZpbmFsaXplZCBkYXRhZnJhbWUgZnJvbSBwcmV2aW91cyBzdGVwDQpgYGB7ciBNYWluREYsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQ0KZGZzdHVkZW50QiA8LQ0KICBkYXRhLmZyYW1lKA0KICAgIFJlc3BvbmRlbnQsDQogICAgUHJvZ3JhbW1lLA0KICAgIFNTSUQsDQogICAgTWFoYWxsYWgsDQogICAgVXNhZ2UsDQogICAgU2F0aXNmYWN0aW9uLA0KICAgIER1cmF0aW9uLA0KICAgIFNwZWVkLA0KICAgIERpc2Nvbm5lY3RlZCwNCiAgICBDb3ZlcmFnZSwNCiAgICBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRQ0KICApDQpkZnN0dWRlbnRBIDwtDQogIHVuaXF1ZShkZnN0dWRlbnRCWywtNV0pICMgbWludXMgVXNhZ2UgYW5kIHJldHJpZXZlIG9ubHkgdW5pcXVlIHJlY29yZHMNCg0KZGZ0ZXN0IDwtIHRtcHRlc3QNCmBgYA0KDQoNCiMjIEhpZ2ggbGV2ZWwgc3VtbWFyeQ0KDQpgYGB7ciBTdHVkZW50QVN1bW1hcnksIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgcGFnZWQucHJpbnQ9RkFMU0V9DQpkZlN1bW1hcnkoDQogIGRmc3R1ZGVudEFbLC0xXSwNCiAgbWF4LmRpc3RpbmN0LnZhbHVlcyA9IDE1LA0KICBwbGFpbi5hc2NpaSA9IEZBTFNFLA0KICBzdHlsZSA9ICJncmlkIiwNCiAgZ3JhcGgubWFnbmlmID0gMC43NSwNCiAgdmFsaWQuY29sID0gRkFMU0UsDQogIHRtcC5pbWcuZGlyID0gIi4vaW1nIiwNCiAgbmEuY29sID0gRkFMU0UNCikNCmBgYA0KDQoNCiMjIFVzYWdlIG9mIEludGVybmV0DQoNCmBgYHtyIFVzYWdlUGllLCBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHBhZ2VkLnByaW50PUZBTFNFfQ0KZGZ1c2FnZSA8LSBjb3VudChkZnN0dWRlbnRCJFVzYWdlKQ0KcGxvdF9seSgNCiAgZGZ1c2FnZSwNCiAgbGFiZWxzID0gZGZ1c2FnZSR4LA0KICB2YWx1ZXMgPSB+IGRmdXNhZ2UkZnJlcSwNCiAgdHlwZSA9ICdwaWUnDQopICU+JQ0KICBsYXlvdXQoDQogICAgdGl0bGUgPSAnUHJpbWFyeSBVc2FnZSBvZiBJbnRlcm5ldCcsDQogICAgeGF4aXMgPSBsaXN0KA0KICAgICAgc2hvd2dyaWQgPSBGQUxTRSwNCiAgICAgIHplcm9saW5lID0gRkFMU0UsDQogICAgICBzaG93dGlja2xhYmVscyA9IEZBTFNFDQogICAgKSwNCiAgICB5YXhpcyA9IGxpc3QoDQogICAgICBzaG93Z3JpZCA9IEZBTFNFLA0KICAgICAgemVyb2xpbmUgPSBGQUxTRSwNCiAgICAgIHNob3d0aWNrbGFiZWxzID0gRkFMU0UNCiAgICApDQogICkNCmBgYA0K